home *** CD-ROM | disk | FTP | other *** search
/ Aminet 35 / Aminet 35 (2000)(Schatztruhe)[!][Feb 2000].iso / Aminet / util / libs / MMU_Update.lha / MMU_Update / ReadMe < prev    next >
Text File  |  1999-12-05  |  60KB  |  1,434 lines

  1. The mmu.library project © 1998,99 the mmu.library development group, THOR
  2. -----------------------------------------------------------------------------
  3.  
  4. Release 41.2
  5. ---------------
  6.  
  7.     - The MMU Library build-in AddMem failed in case the base or length
  8.       were not aligned to 64K boundaries. It now rounds to the next 64K
  9.       boarders such that the supplied area is at least mounted partially.
  10.     - The idea to disable the TTx registers in the mmu.library was 
  11.       unfortunately not a very smart idea as it broke the code on some
  12.       machines. Re-established the old rule with the only exception that
  13.       the TTx registers are initialized for the EC040.
  14.     - The ColdReboot() patch of the 68040.library used the MMU registers
  15.       even on a system without MMU. Fixed.
  16.     - MuMove4K checks now all libraries, devices, ports, resources and 
  17.       resident modules whether they violate the 8K boundary.
  18.     - 68040.library: Forgot to disable the caches in ColdReboot().
  19.     - 68040.library: The motorola OpErr handler did not consider tracing
  20.       correctly. Fixed.
  21.     - Finally wrote and included the 68020.library and the 68030.library,
  22.       hence "FPU" will work on these machines.
  23.     - Updated MuGuardianAngel: Added a new keyword "DUMPWALL" that prints
  24.       the contents of a broken mung-wall and of broken memory cookies.
  25.  
  26. Release 41.1
  27. ---------------
  28.  
  29.     - ScanMMUPort was broken and scanned for the wrong port. *Sigh*
  30.       This release should work better on Blizzard boards.
  31.     - AddMemList() uses now RebuildTreesA() to rebuild user and
  32.       supervisor tables at once and is therefore a bit more error
  33.       tolerant.
  34.     - The mmu.library will now support CachePreDMA/CachePostDMA for
  35.       the EC040 and EC060 processors as well.
  36.     - The 68040.library will now disable the TTx registers manually
  37.       such that the "generic" board does no longer require an
  38.       ENVARC:MMU-Configuration file.
  39.     - The 68040.library will now enable copyback caches for the EC040.
  40.     - Some of the MuTools did not unload properly if loaded from the workbench,
  41.       fixed.
  42.     - The MuTools are now a bit more error tolerant due to a new function in the
  43.       V41 mmu.library which gets used.
  44.  
  45. Release 40.60
  46. -------------
  47.  
  48.     - fixed the shutdown code of MGA, thanks to Stephan!
  49.     - disabled a kludge in the mmu.library which write protected 
  50.       a kickstart image at 0x00200000 and up by checking the name 
  51.       of execbase. This kludge might have conflicted with some softkickers.
  52.     - Because people tend not to read guides, I added the 
  53.       arguments "WRITEPROTECTED" and "INVALID" to the library build-in 
  54.       "SetCacheMode". Note that they work different to what "MuSetCacheMode" 
  55.       does. Here, "WRITEPROTECTED" and "INVALID" are just aliases to "ROM" 
  56.       and "BLANK", hence enable the most defensive protection strategy.
  57.     - Added a new LVO "RebuildTreesA" which is "officially" not yet 
  58.       existing and will be documented in V41. More LVOs might be added up 
  59.       to V41, but please *DO NOT* yet call them as they did not exist 
  60.       in V40.50.
  61.     - Fixed the installation script, due to a typo the P5 MMU boot hack 
  62.       was not detected.
  63.     - Fixed the P5Detect program which just looked to the wrong
  64.       identification resources. Ooops. Installation on "non-standard"
  65.       boards should be smoother now.
  66.     - Fixed a bug in the disassembler.library which disassembled the
  67.       lea (offset.L,pc)
  68.       wrong. The offset was wrong by two bytes.
  69.     - The release number in the MuForce guide was wrong. 
  70.     - When will people finally learn to read the FAQ? *Sigh*
  71.       In case MuFastZero complains "The zero page is already remapped",
  72.       ---> READ THE GUIDE. <---
  73.  
  74.  
  75. Release 40.51.1
  76. -------------
  77.  
  78.     - disabled the layers.library kludge for MuGuardianAngel if V40
  79.       is found active. It is luckely no longer required.
  80.  
  81. Release 40.51
  82. -------------
  83.  
  84.     - fixed a bug in the 68060 startup logic which left the MMU disabled
  85.       in case it was disabled before. This made the custom 68060.library
  86.       useless.
  87.     - included the 40.17ß3 release of Carten Schlote's 68060.library
  88.       which (for the first time) makes use of the MMU.library.
  89.  
  90. Installation of this library requires some care as IT DOES NOT automatically
  91. auto-detect P5 hardware and special setup magic for this hardware. This is
  92. not because the library is "broken" in some sense, but because P5 didn't 
  93. follow the CBM guidelines when designing their hardware. Therefore, an
  94. experimental installation script has been written. This script must be
  95. run as follows:
  96.  
  97.     - Unpack the archive to disk,
  98.     - Enter the following commands:
  99.  
  100. cd <MMULib>/Install    ;where <MMULib> is the directory you unpacked this 
  101.             ;archive to
  102.  
  103. SYS:Rexxc/rx BuildMMUConfig.rexx ENVARC:MMU-Configuration
  104.  
  105.     - The last command builds the MMU configuration and writes it
  106.       to ENVARC:MMU-Configuration. It might also copy ScanMMUPort
  107.       to LIBS:MMU. This is an external setup command for the library
  108.       and might or might not be required. Older P5 hardware does *not*
  109.       require it (I would guess that this is explicitly for the 
  110.       Blizzards, but I'm not sure).
  111.       Non-P5 hardware will not require it at all.
  112.       You might want to hand-edit or optimize this script if you need,
  113.       as it will contain several optimizations for graphics cards and
  114.       other known boards.
  115.  
  116.     - KEEP THE OLD 68060.library IN A SAFE PLACE.
  117.     - Make sure to install the 40.51 edition of the mmu.library
  118.     - Copy the 68060.library to LIBS:
  119.     - Reboot the computer and wish the new library luck. (-:
  120.  
  121. This edition of the '060 lib does *not yet* include correct VMM management
  122. and FPU control functions (hence, C:FPU will not yet work). It is shorter
  123. and costs less memory because it leaves the MMU setup to the mmu.library.
  124. (Note that this release contains still debugging information).
  125.  
  126.  
  127. In case the installation failed:
  128.  
  129.     - Make sure the mathieedoubbas.library you're using is truely the
  130.       official 38.x or the patched and bugfixed 39.1. Some other third-
  131.       party products may fail to work correctly if the 68060 support
  132.       code is not yet loaded.
  133.  
  134. In case running the library fails (i.e. system doesn't boot):
  135.  
  136.     - Make sure LIBS:mmu/ScanMMUPort is really available at boot-up
  137.     - Please re-boot the computer without the startup-sequence,
  138.     - Keep ENVARC:MMU-Configuration in a safe place,
  139.     - Re-install the old 68060.library.
  140.     - Boot the computer again,
  141.     - Run "MuScan" and keep the output.
  142.  
  143. Then, please sent me the output of MuScan, and the ENVARC:MMU-Configuration
  144. file with a tiny note what exactly happened (or did not happen).
  145.  
  146.  
  147. Release 40.50
  148. --------------
  149.  
  150.     - added external command scanning in case a setup command is
  151.       not found "resident".
  152.     - included Richard Körber's PatchWork and Olaf Barthel's
  153.       Sashimi. The "PatchWork" edition is *NEW* and *NOT YET AVAILABLE*
  154.       otherwise. Big "thank you" to Richard for updating it for this
  155.       archive. Big thanks to Olaf Barthel for allowing me to include
  156.       his "Sashimi" in the archive.
  157.     - bumped the version number.
  158.     - Final release.
  159.  
  160. Release 0.48
  161. --------------
  162.     - mmu.library: Added a new command in the MMU-Configuration file,
  163.       "DescriptorCacheInhibit". It controls whether the MMU library
  164.       should disable the data cache for the descriptors. This is by
  165.       default OFF as this feature means more trouble for the library,
  166.       and is not required for using the library. However, this might
  167.       be a workaround for programs that hack the MMU table themselves,
  168.       which is not supported anyhow. Set it to "ON" if you MUST use
  169.       these programs.
  170.     - Added another VMM support function.
  171.     - MuGuardianAngel: The "memory header" output was broken, fixed.
  172.       Added more security checks, MuGuardianAngel will warn you in
  173.       case its function entries have been patched (which is not 
  174.       supported)
  175.     - MuGuardianAngel: Added automatic stack checking within the
  176.       memory allocation functions - an overrun stack seems to be the
  177.       most common source of MuGuardianAngel problems. MuGuardianAngel
  178.       will now detect an "nearly out of stack" condition in the memory
  179.       handling, and will provide an "emergency" stack in case this
  180.       happens. It will then generate a warning, regardless of whether    
  181.       stack snooping is enabled or not.
  182.       Interestingly, the RAM-Handler and the FastFilingSystem are the
  183.       most common sources of stack-overflows. This should be fixed for 
  184.       the RAM handler with "PatchRAM" in this archive, the FFS stack
  185.       should be added manually in the RDB, though. The smallest re-
  186.       commended stack size is 786 bytes, not less!
  187.     - P96: (yes, you read this correctly) supports now the mmu.lib if
  188.       it is available.
  189.     - Added an experimental GfxCard setup program to optimize cacheing.
  190.       This function is included in P96 anyhow, so not really required.
  191.  
  192.     - mmu.library: MOVE16 is now "sort of" supported, in the sense that
  193.       the exception handler will be able to handle it. However:
  194.       - MOVE16 is not supported by all Amiga hardware, it may crash,
  195.       - A MOVE16 on a 68040 is potentially dangerous due to a bug in
  196.         the CPU. A MOVE16 might invalidate cache lines which are not
  197.         related to the MOVE16 operation at all. There is currently a
  198.         workaround for this, namely: Do not set the "imprecise", or
  199.         "user page" bits 0-3 for swapped, invalid or supervisor only
  200.         pages. I do not guarantee that this workaround will remain
  201.         valid. *JUST DON'T USE MOVE16.*
  202.       - A MOVE16 may cause double reads, do not use this to read from
  203.         hardware registers that cannot tolerate this. Do NOT use it
  204.         at all!
  205.       - A MOVE16 which causes the exception handler to enter may be
  206.         completed by means of ordinary writes, which means that in
  207.         this situation no burst access is used, and the order of the    
  208.         data written out or read might be different from that of a
  209.         true MOVE16. *JUST DO NOT USE IT, OK!*
  210.  
  211.     - mmu.library: On read/modify/write accesses, the library might
  212.       have reported a write protection fault instead of a simple 
  213.       write fault on the write cycle of the instruction. Fixed.
  214.  
  215.     - MuGuardianAngel: Added more consistency checks, added checks
  216.       and support for memory pools, made some error messages more
  217.       informative.
  218.  
  219.     - MuMove4K: Added the NOREBOOT option to avoid unnecessary reboots
  220.       if the system is rebooted by a second program afterwards anyhow.
  221.  
  222.     - Included a patch for the V44 SetPatch.
  223.  
  224. Release 0.47
  225. --------------
  226.     - mmu.library: Changed again the cache control logic a bit. Please
  227.       try DMA transfers again. The new logic does not block interrupts
  228.       as long as the old logic, hence might avoid problems if fast
  229.       interrupt processing is required. It should be *slightly* faster
  230.       as well.
  231.     - MuForce: MuForce catches now supervisor exceptions as well if you
  232.       specify the "CAPTURESUPER" keyword. This requires patching of
  233.       some autovectors.
  234.     - Added a new drawer "Contributions", containing more tools from
  235.       other people I regard as very useful. This is "Sashimi" by
  236.       Olaf Barthel, and "PatchWork" by Richard Körber. Thanks Olaf,
  237.       thanks Richard for allowing me to include your great work!     
  238.     - Run all guides thru ISpell, hopefully correcting most typos.
  239.     - MuMove4K: The PREPAREEMUL option disabled the CPU instruction
  240.       cache. I expected the ROM would re-enable it somewhat later, but
  241.       it didn't. Fixed.
  242.  
  243. Release 0.46
  244. --------------
  245.     - mmu.library: Found that the "ramlib" task is really very low on
  246.       stack. I'm now swapping the stack on library startup to avoid
  247.       problems.
  248.     - updated the mmu.lib exception handler. It is now possible to use
  249.       the exception mechanism to auto-extend the stack and to keep the
  250.       user stack on virtual memory. The new "message hook" mechanism
  251.       does not require user stack space. However, an additional patch
  252.       to the exec switch function is required for this trick. This
  253.       patch is currently not included in the mmu.library - basically
  254.       because this is not directly MMU related.
  255.     - MuGuardianAngel will now stop to check for a valid free memory
  256.       counter if it finds a problem and reports the problem immediately.
  257.     - MuForce is now able to capture even "ordinary" MC68K exceptions.
  258.       This can be disabled with the new "NOGURUPATCH" option.
  259.     - Included a "synchronous" version of the 680x0.library because the
  260.       asynchronous outsmarted several systems.
  261.     - mmu.library: The chip ram is now by default marked as cacheinhibit 
  262.       imprecise nonserialized. This will speed up chip ram access a bit
  263.       for the 68060 and 68040. Works of course only if the MMULib is
  264.       used to setup the MMU tables, i.e. for users of the V40 68040 lib.
  265.       Video RAM of several graphics cards can be setup in the same way
  266.       as well, but since there's no way to identify expansion hardware as
  267.       video ram, you've to do that manually.
  268.     - mmu.library: The F-Space is now by default marked as cacheinhibit
  269.       to allow (IMHO misdesigned) hardware to map in here without telling
  270.       the system. This can be disabled by using the MMU-Configuration
  271.       file.
  272.     - Added a new MuTool: MuFastChip. This tool will enable the imprecise
  273.       or nonserialized cache mode for chip memory and will hence improve
  274.       chip memory access performance for systems where a third-party 040 
  275.       or 060 library does not setup the MMU tables in the optimal way.
  276.       The MMU.library (and hence the V40 68040.lib) *will* build its own
  277.       MMU tables with this feature enabled anyhow if it doesn't find an
  278.       MMU table to start from. 
  279.     - Fixed the SetPatch fix. (You kept the original, right? :-)
  280.       It might have been that the 43.7 edition installed a fix for the
  281.       mathieeesingbas.library even if this fix is unnecessary and fatal,
  282.       as it is for the 68881/68882 FPU.
  283.  
  284. Release 0.44
  285. --------------
  286.     - mmu.library:    The "AddMem" command in the MMU-Configuration file
  287.       was broken. Added the memory twice, causing nothing but a mess.
  288.     - Added a safety check for "AddMem", the command is now ignored
  289.       in case the memory in question is already added.
  290.     - "SetCacheMode" argument "valid" was broken and did not validate
  291.       the memory at all.
  292.     - AddMem'd memory was added after the MMU table setup, hence wasn't
  293.       used for the MMU descriptors. The library *tries now* to add it
  294.       as soon as possible to make some use of it for building the MMU
  295.       trees.
  296.     - MuFastZero: The FORCENATIVE option generated a failure code in
  297.       case the zero page wasn't remapped, stopping additional options
  298.       like MOVESSP from working.
  299.     - MuGuardianAngel: The "MemHeader free counter incorrect" error
  300.       handler did not save back one register and hence caused additional
  301.       hits.
  302.     - MuGuardianAngel: Ooops, found a problem of the RAM-Handler. Not
  303.       a MuGuardianAngel problem, but a real design fault of RAM: DO NOT
  304.       try to delete and write to the RAM: disk at the same time, this
  305.       will cause lots of trouble.
  306.     - Included a fix for the CBM mathieeedoubbas.library 38.2. This
  307.       library fails to compare floating point numbers below zero
  308.       correctly in some cases. The P5 library patches mathieeedoubbas
  309.       to fix this, but the 68040.library should not be a replacement
  310.       for SetPatch. To apply the patch,
  311.  
  312. 1)      Copy the file LIBS:mathieeedoubbas.library to RAM:
  313. 2)      Copy the file mathieeedoubbas.pch in the directory "Fixes" to RAM:
  314. 3)      Copy the "spatch" program at the same place to RAM:
  315. 4)      Change the directory to ram: with "cd RAM:"
  316. 5)      Apply the patch with    "spatch mathieeedoubbas.library"
  317. 6)      Copy the file RAM:mathieeedoubbas.new to
  318.         LIBS:mathieeedoubbas.library. It contains the fixed library.
  319.  
  320.     - In case the V40 68040.library slowed your computer down:
  321.       copy the file "MMU-Configuration" from the "ENVARC" drawer into
  322.       "ENVARC:". In case this causes crashes with Z-II memory, follow
  323.       the instructions in the file and remove one semicolon in front of
  324.       the "SetCacheMode" command. 
  325.     - Removed the debugging information from all files.
  326.     - Added the MMU master guide. Please check this, is this understand-    
  327.       able? In case I forgot to mention you in the credits, please let
  328.         me know!
  329.     - Moved all libraries to a separate directory, "Libs"
  330.     - Included a new library, the 680x0.library. This is the CPU
  331.       unspecific CPU driver. It's job is to detect which CPU is avail-
  332.       able in your system, and to load the CPU specific code. It there-
  333.       fore acts very much like the P5 68040dummy.library, except that
  334.       it remains in the system and provides user-callable function
  335.       entries for querying the CPU/FPU/MMU type and to setup the FPU
  336.       exceptions. The CPU specific library *should never be called
  337.       directly*, this library will re-route the calls to the correct
  338.       library. Furthermore, it loads the library in background, helping
  339.       to speed up the boot process a bit. 
  340.     - A special edition of SetPatch is available that loads the 680x0
  341.       library instead the 68040.library, regardless of which processor 
  342.       is available. The 680x0.library will then even try to load an
  343.       68000.library or 68020.library. This library could be used, for
  344.       example, to install line-F instructions to emulate the FPU 
  345.       completely in software, even for a 68020 or 68000 without FPU.
  346.       To patch "SetPatch", 
  347.  
  348. 0)    Keep a copy of SetPatch in a safe place.
  349. 1)      Copy the file C:SetPatch to RAM:
  350. 2)      Copy the file SetPatch.pch in the directory "Fixes" to RAM:
  351. 3)      Copy the "spatch" program at the same place to RAM:
  352. 4)      Change the directory to ram: with "cd RAM:"
  353. 5)      Apply the patch with    "spatch SetPatch"
  354. 6)      Copy the file RAM:SetPatch.new to C:SetPatch. This is the
  355.     inofficial 43.7 edition of SetPatch.
  356.  
  357.     - Included a new program, "FPU" in the "Shell only" drawer. This
  358.       program controls the exception generation of the FPU. It will
  359.       only work with the 680x0.library and the V40 68040.library
  360.       installed.
  361.  
  362.  
  363. Release 0.42
  364. --------------
  365.     - 68040.library: Only cosmetic changes. Added a AN_Zombie guru in
  366.       case the ColdReboot() function returned. I've no idea how this
  367.       could happen.
  368.     - mmu.library: I don't thrust the AFF_68060 flag any more. The
  369.       68060.library of the LC75 Apollo board does not set this bit
  370.       correctly and hence identifies the 060 as 040. Hence, the library
  371.       tried to install the wrong driver and crashed desparately. The
  372.       library tries now to identify an 060 in case at least an 040 is
  373.       indicated. The library updates then its own AttFlags copy 
  374.       correctly. Outch! I don't know whether this is a typo in the
  375.       sources of the 68060.lib, or this intended and something "sneaky"
  376.       I fail to understand. 
  377.     - Fixed one bug in the disassembler.library. It failed to disassemble
  378.       64 bit arithmetics correctly.
  379.     - MuFastRom: In case no argument is given, the program uses now the
  380.       default "On".
  381.     - MuFastZero: Again, made "On" the default argument. Added the
  382.       "MoveSSP" and "StackSize" arguments to relocate the supervisor
  383.       stack to fast ram. This does not make use of the MMU.
  384.     - Added the "CheckFPU" command, in the "Shell_Only" drawer. This
  385.       program prints the version number of a 68040 FPU if one is avail-
  386.       able. Two versions exist, the V40 "original" which is very buggy
  387.       and the V41 "revised" with less bugs. The 68040.library supports
  388.       currently both, with lots of workarounds for the V40. Please
  389.       contact me in case you find a V40 edition in your Amiga.
  390.     
  391.  
  392. Release 0.41
  393. --------------
  394.  
  395.     - Forgot to update the version number in 0.40. Reported 0.38. Oops.
  396.     - TTx parsing was still not 100% correct, but much better. Fixed.
  397.     - Due to a typo, branch cache flushes were effectively disabled.
  398.       Outch! Forgot one single "$".
  399.     - Added branch cache flushes on context switches, recommended by
  400.       Motorola.
  401.     - Added includes, autodocs and .fd files for the 68040.library.
  402.     - Updated MuFastZero and MuFastROM to include and set the cache
  403.       flags according to the mirrored RAM. This is of importance in
  404.       case non-cacheable Z-II fast RAM is used to build the mirror.
  405.     - Made mild modifications to the FPSP FPU emulator package to speed
  406.       it up a bit. The 40.1 release is now unnoticably faster than the
  407.       Mike Sinz 37.30 release, which is again unnoticably faster than
  408.       the P5 release.
  409.     - Added a workaround in GetMsg() to keep some brain-dead programs
  410.       working that call GetMsg() in a tight loop without giving
  411.       interrupts a chance to occur. These programs tend to block the
  412.       computer completely, especially if the ROM is remapped to 
  413.       cacheable, burstable memory. The workaround is a single NOP.
  414.  
  415. Release 0.40
  416. --------------
  417.     New in this release:
  418.  
  419.     - Added four internal undocumented LVOs for external CPU drivers.
  420.     - Fixed a bug in the CPU detection routine. A 060 EC or LC was
  421.       not recognized. Outch! Which smart guy at Motorola decided to use
  422.       the same processor ID for both products? The EC doesn't have a MMU,
  423.       the LC - as for example used by the LC75 Apollo board - does.
  424.       This might well explain a lot of problems of the Apollo board....
  425.     - Fixed a bug in the library init routine which would cause a guru
  426.       in case no MMU is available at all. The library MUST load, and
  427.       some functions will be available even without an MMU.
  428.     - Fixed several minor bugs of the TTx parsing routine, hopefully
  429.       correcting problems with some ancient 040 library releases that
  430.       didn't make use of the MMU (how should that work?)
  431.     - Fixed a serious bug of the Alert() replacement function, the stack
  432.       was used plain wrong. Thanks Etienne!
  433.     - Included an updated and more streamlined version of MuLockLib,
  434.       thanks to Gunther Nikl for providing it.
  435.     - Updated MuSetCacheMode, added more options.
  436.     - Added a configuration/preferences file and a preferences file
  437.       parser.
  438.     - Included now the "stripped" versions of the libraries in a sub-
  439.       directory of the same name. These editons don't contain the de-
  440.       bugging information and are therefore shorter.
  441.     - *News flash* 
  442.       This release comes with an upgraded version of the 68040.library.
  443.       This library is still in "beta" stage, but makes already use of
  444.       the mmu.library for the MMU configuration. It is for that reason
  445.       even shorter than the 37.30 release, even though it uses the latest
  446.       68040 FPU emulation code from Motorola.
  447.       FPU exceptions are configurable thru an LVO vector of the library,
  448.       but I haven't written a control tool yet. This will follow in the
  449.       next distribution.
  450.       This release *will only work* if the 37.30 runs on your machine,
  451.       you should, however, edit the ENVARC:MMU-Configuration file to 
  452.       to make some P5 boards working. The file should contain this line:
  453.  
  454. SetCacheMode    from 0x00f00000 size 0x00080000 valid iospace
  455.  
  456.       If you use this edition of the 68040.library, it might disable
  457.       caches for the Z-II address space completely. If this is not
  458.       desired, you may turn them on again with the following line in
  459.       the MMU-configuration file:
  460.  
  461. ClearTTX    
  462.  
  463. The path of the preferences file is ENV:MMU-Configuration or 
  464. ENVARC:MMU-Configuration if the first file is not found. The file looks like
  465. a standard shell script except that only three commands are known. All
  466. other commands are ignored silently for forwards compatibility, more might
  467. be made available in the future. The semicolon is used to separate comments 
  468. from the commands, the text following a semicolon is ignored.
  469.  
  470. The following three commands are available:
  471.  
  472. ClearTTX    ITT0/S,ITT1/S,DTT0=TT0/S,DTT1=TT1/S,ALL/S
  473.  
  474.     Controls the mmu.library use of the transparent translation registers.
  475.     By default, they are considered, their setup is added to the MMU
  476.     tree layout and they are cleared afterwards. Using this command,
  477.     several TTx registers can be made to be ignored (even though they
  478.     are still cleared because they are "in the way")
  479.  
  480.     ITT0        Ignore the instruction transparent translation 
  481.             register 0. (68040 and 68060 only).
  482.     ITT1        Ignore ITT1 (68040 and 68060 only).
  483.     DTT0        Ignore the data transparent translation register
  484.             number 0 (68040 and 68060) or the transparent
  485.             translation register 0 (68030).
  486.     DTT1        Ignore DTT1 (68040 and 68060) or TT1 (68030)
  487.     DTT0        Ignore DTT0
  488.  
  489.     ALL        Ignore all TTx registers. This is the default if
  490.             no other options are given.
  491.  
  492.     This command does nothing on a 68851 because this MMU doesn't offer 
  493.     transparent translation registers at all.
  494.  
  495.  
  496. AddMem        FROM=ADDRESS/A,LENGTH=SIZE/A,ATTR=FLAGS/K,PRI/K,NAME/K
  497.  
  498.     Adds memory to the exec memory pool. Note that THIS DOES NOT
  499.     make the memory available, i.e. it is NOT AUTOMATICALLY marked
  500.     as "valid". Hence, an "AddMem" command requires most likely a
  501.     "SetCacheMode" for the same memory region or the library will
  502.     crash on startup.
  503.  
  504.     FROM=ADDRESS    Base address of the memory to be added. in hex
  505.             notation. A leading $ or 0x is allowed.
  506.             This address must be aligned to a 64K boundary.
  507.  
  508.     LENGTH=SIZE    Size of the memory to be added in bytes, in hex.
  509.             Again, must be divisible by 64K.
  510.     
  511.     ATTR=FLAGS    Memory attribute flags in hex. Defaults to 0x05
  512.             which is MEMF_PUBLIC|MEMF_FAST. More flags are
  513.             documented in exec/memory.h. The library *does not*
  514.             know the nmemonics for the memory types, though.
  515.  
  516.     PRI        Priority of the memory pool to be added, in decimal
  517.             notation. This must be a number between -128 and 127. 
  518.             Defaults to six.
  519.  
  520.     NAME        Name of the memory pool. 
  521.             Defaults to "MMU expansion memory".
  522.  
  523.     Again, this command *does not* make the memory available for the
  524.     processor, an additional "SetCacheMode" is required.
  525.  
  526.  
  527. SetCacheMode    FROM=ADDRESS/A,LENGTH=SIZE/A,
  528.         COPYBACK/S,WRITETHROUGH/S,CACHEINHIBIT/S,
  529.         NONSERIAL/S,IMPRECISE/S,
  530.         VALID/S,BLANK/S,
  531.         IO=IOSPACE/S,NOIO=NOIOSPACE/S,
  532.         ROM/S,NOROM/S
  533.  
  534.     This is a "cut down" version of the "MuSetCacheMode" command, it
  535.     supports a sub-set of its cache control commands. Options that
  536.     modify memory in a way that could result in access errors are not
  537.     supported and must be setup by hand with "MuSetCacheMode".
  538.  
  539.     FROM=ADDRESS    The base address of the memory region whose cache
  540.             mode shall be changed. This is in hex notation, a
  541.             leading 0x or $ is allowed.
  542.             The library will round this down to the next
  543.             page size boundary, which is usually 4K or 1K.
  544.  
  545.     LENGTH=SIZE    The size of the memory region in bytes, in hex
  546.             notation. 
  547.             The library will round this up to the next page
  548.             size if required.
  549.  
  550.     COPYBACK    Enables the copyback cache mode. This is the
  551.             fastest cache mode available, reads and writes are
  552.             cached if the CPU allows this. This option will 
  553.             fall back to WRITETHROUGH on a 68030 or 68851.
  554.  
  555.     WRITETHROUGH    Enables the writethrough cache mode. Reads will
  556.             be cached, writes will enter the cache but will be
  557.             written out to memory as well.
  558.  
  559.     CACHEINHIBIT    Disables the cache completely.
  560.  
  561.     NONSERIAL    Disables the cache, but allows the CPU to reorganize
  562.             accesses to speed up memory transfers a bit. 
  563.             (68040 only, does nothing on all others).
  564.  
  565.     IMPRECISE    Disables the cache, but allows the CPU to handle
  566.             access errors a bit "sloppy" to speed up access a
  567.             bit. (68060 only, does nothing on all others).
  568.  
  569.     VALID        Validates the memory region, i.e. makes it available.
  570.             This option is required to enable a memory region
  571.             that should be added to the exec memory pool by the
  572.             "AddMem" command.
  573.  
  574.     BLANK        Invalidates the memory region, all accesses will be
  575.             remapped to a "dummy" page.
  576.  
  577.     IO=IOSPACE    Marks the memory region as mapped IO space, and
  578.             sets the cache mode to CACHEINHIBIT. The cache mode
  579.             can be overridden by using the cache control options.
  580.  
  581.             This is a pure software flag which is, however, used            
  582.             by MuForce and friends. Memory marked as IOSPACE is
  583.             never disassembled or dumped because of undesireable
  584.             side effects that might result.
  585.  
  586.     NOIO=NOIOSPACE    Marks the memory as plain RAM space, negative form of
  587.             IO=IOSPACE.
  588.  
  589.     ROM        Marks the memory as ROM space and enables the
  590.             defensive write protection. Writes to this area will
  591.             be ignored silently.
  592.  
  593.     NOROM        Marks the memory as RAM space, writes are allowed.
  594.             Negative form of NOROM.
  595.  
  596.  
  597. For example, to add non-autoconfiguring fast cacheable memory 
  598. from 0x02000000 to 0x03ffffff, setup your "MMU-Configuration" as follows:
  599.  
  600. SetCacheMode    from 0x02000000 size 0x01000000 valid copyback
  601. AddMem        from 0x02000000 size 0x01000000
  602.  
  603. --
  604. To disable the cache of autoconfiguring Zorro-II memory, as required by
  605. some 040 and 060 based boards that can't break up burst accesses into
  606. 16-bit Z-II accesses:
  607.  
  608. SetCacheMode    from 0x00200000 size 0x00800000 cacheinhibit
  609.  
  610. The GVP Combo 040 is an example for a board requiring this "adjustment".
  611.  
  612. --
  613. To mark non-autoconfiguring hardware in the F-Space as "IO space":
  614.  
  615. SetCacheMode    from 0x00f00000 size 0x00080000 iospace
  616.  
  617. Most P5 boards suffer from this design problem.
  618.  
  619.  
  620. Release 0.38
  621. --------------
  622.     New in this release:
  623.  
  624.     - Added four internal undocumented LVOs for external CPU drivers.
  625.     - Fixed a bug in the CPU detection routine. A 060 EC or LC was
  626.       not recognized. Outch! Which smart guy at Motorola decided to use
  627.       the same processor ID for both products? The EC doesn't have a MMU,
  628.       the LC - as for example used by the LC75 Apollo board - does.
  629.       This might well explain a lot of problems of the Apollo board....
  630.     - Fixed a bug in the library init routine which would cause a guru
  631.       in case no MMU is available at all. The library MUST load, and
  632.       some functions will be available even without an MMU.
  633.     - Fixed several minor bugs of the TTx parsing routine, hopefully
  634.       correcting problems with some ancient 040 library releases that
  635.       didn't make use of the MMU (how should that work?)
  636.     - Fixed a serious bug of the Alert() replacement function, the stack
  637.       was used plain wrong. Thanks Etienne!
  638.     - Included an updated and more streamlined version of MuLockLib,
  639.       thanks to Gunther Nikl for providing it.
  640.  
  641. Release 0.37
  642. --------------
  643.     New in this release:
  644.  
  645.     - Added two tags for Get/SetContextData in preparation for the
  646.       memory library.
  647.     - Wrote a replacement AddMemList() function because some 
  648.       versions of the 68040/68060.library functions patch this function.
  649.       This release will adjust the MMU tables for the DEFAULT CONTEXT
  650.       only, which means that all memory must be ready AT LEAST AS SOON
  651.       AS A PRIVATE CONTEXT IS CREATED.
  652.  
  653.  
  654. In case you've problems with this library release:
  655. o) Please install the mmu.library_debug ON TOP of the mmu.library, i.e. use
  656.  
  657. copy mmu.library_debug to LIBS:mmu.library
  658.  
  659. o) Reset the system
  660. o) Run Sushi or Sashimi to fetch the output. Give them a HUGE buffer
  661. o) Load the library. MuLockLib would do that, for example.
  662.  
  663. Release 0.36
  664. --------------
  665.     News in this release:
  666.  
  667.     - Fixed MuMove4K, added the A1200 option and fixed the shutdown code.
  668.     - Fixed MuLockLib, there was a slight chance for a crash (thanks to
  669.       Gunther Nikl for reporting)
  670.     - Fixed the .fd-File. I forgot to include two functions making
  671.       the table useless, and forgot to include one library 
  672.       function in the library lvo jump table. Outch!
  673.     - Fixed the new memory map functions.
  674.     - Tested indirect descriptor functions, included a new test,
  675.       see MuIndirectTest.
  676.  
  677. I'm planning to upload the 0.36 to the Aminet next saturday, I won't be in
  678. town from July 18th to August 8th. 
  679.  
  680. Release 0.35
  681. -------------
  682.     News in this release: Something in the library, even though no
  683.     real serious bugs have been found. More functions, but more power-
  684.     ful debugging tools.
  685.  
  686.     - Added support functions for memory maps, likely untested.
  687.     - Added support functions for indirect descriptors and *VERY FAST*
  688.       indirect page swapping.
  689.     - Fixed a tiny bug in the 060 support which might have failed to
  690.       detect physical bus errors correctly.
  691.     - Fixed a bug in GetPageProperties which might have failed to
  692.       read remapped memory correctly.
  693.     - Streamlined the tag item parse functions.
  694.     - Updated documentation and includes.
  695.     - Wrote the disassembler.library, added to the distribution.
  696.     - Updated MuForce: The program makes use of the disassembler.library
  697.       and prints now a disassembly of the faulty code on demand.
  698.     - Fixed a bug in MuGuardianAngel, stack dump was broken.
  699.     - Updated MuGuardianAngel, included disassembly function.
  700.     - Updated MuMove4K a lot, included a PREPAREEMUL function,
  701.       wrote a better guide, drew a shell icon.
  702.     - Included more shell tools, PrintBusError, ResetBusError and
  703.       ClearTTx.
  704.  
  705. The Apollo LC060 75Mhz showed problems with the mmu.library. I don't know
  706. how these problems arose, but it might be that the MMU doesn't like the over-
  707. clocking. To test this, please run the "ClearTTx" program with the NATIVE
  708. Apollo setup and check whether this works or not.
  709.  
  710. The PrintBusError tool will dump the bus error vector. It should always
  711. point to the library.
  712.  
  713. The ResetBusError will repair the bus error vector in case it was messed
  714. up by a program. It should be run WITHOUT an active debugger, or the result
  715. will be worse, not better. An application for this program is to restore
  716. the correct bus error handler after having used the "SoftBoot" program or
  717. "SetCPU FastROM" or "CPU FastROM". Note that the latter two are obsolete
  718. and replaced by MuFastROM.
  719.  
  720.  
  721. Release 0.34.1
  722. --------------
  723.     I'm pretty happy with the 0.34 how it is now, I haven't found new
  724.     bugs. This doesn't mean there are none, though. (-;
  725.  
  726.     New in this release:
  727.  
  728.     - Updated MuGuardianAngel a bit. The "hit" messages are now more
  729.       informative and contain more detailed information about the
  730.       cause of the hit, as for example which memory chunk was released
  731.       etc... Thanks to Simon for the hint.
  732.     - Added a new program "MuLink" to the MuTools. This is a shell-only
  733.       developer tool for automatic "self-protection" of software. A
  734.       program that gets "MuLink'd" will get its code (or other selected)
  735.       segments automatically write protected. This is most important 
  736.       for software that has to run on critical systems, as BBS's 
  737.       and the like. MuLink is a post-processing tool much like ATOM.
  738.       More about this tool in its documentation.
  739.     - Added a "MuGuardianOff" icon.
  740.     - Updated the documentation.
  741.     - Included E developer files, thanks to Daniel Kasmeroglu. 
  742.  
  743.  
  744. Remaining problems:
  745.     
  746.     - The usual ppc.library problem. Not about to be fixed.
  747.     - The library still refuses to work correctly on an Appollo 75Mhz
  748.       060EC board, I don't know why. TTx setup of this board is now
  749.       supported correctly, but this doesn't seem to help. Wierd.
  750.  
  751. Release 0.34
  752. ------------
  753.     Sigh, the 0.33 DMA logic was still buggy....
  754.  
  755.     - Fixed (another) bug in CachePostDMA(). The routine failed to
  756.       check the CPU AttnFlags correctly and hence did not restore
  757.       the cache mode to copyback. This could have been resulted in
  758.       slowdown of your machine, and hands of several MuTools.
  759.     - Removed all references to the 68040 and 68060.library. This
  760.       will allow a possible future 680x0 library to use the 
  761.       mmu.library to build its MMU tree instead of implementing this
  762.       function a second time.
  763.  
  764. I M P O R T A N T:
  765.  
  766. THIS MEANS THAT ALL THE MUTOOLS *MUST* BE RUN  A F T E R  SetPatch.
  767.  
  768. The only exception to this rule is MuMove4K.
  769.  
  770. Please DO NOT run the MMURemapTest with the cybscsi or cybppc.device. Both
  771. devices are not designed to allow memory remapping (not my fault). In worst
  772. case, they will trash your hard disk!!!
  773.  
  774.  
  775. Thanks goes to Ulrich Falke for helping me to find these bugs, and 
  776. furthermore to Michaela Prüß for supplying the includes and protos for the 
  777. vbcc compiler!
  778.  
  779. Release 0.33
  780. ------------
  781.     Outch, the 0.30 was buggy!
  782.  
  783.     - Fixed a bug in the GetPageProperties() routine for the 030 and
  784.       020 support code. The cache control functions overwrote an 
  785.       important CPU register and therefore crashed MuForce.
  786.     - Fixed a bug in the DMA control logic. Outch! This really broke
  787.       things!
  788.     - Fixed a bug in the MMU table rounding logic. Fixed one overflow
  789.       problem that makes the procedure hang on some machines. 
  790.       Additionally, I forgot to merge adjacent property nodes here.
  791.     - I must have been crazy to remove the PROTECT option in MuFastROM.
  792.       Fixed!
  793.     - MuFastZero OFF improved, and the FORCENATIVE flag was broken
  794.       completely.
  795.     - MuGuardianAngel showed a few bogus exceptions on startup, depends
  796.       on the system configuration. TRSaferPatches caused this, fixed.
  797.     - Added the FixCybAccess workaround. It fixes - or actually 
  798.       works around - a really bad design fault of the cybscsi.device.
  799.       More on this in its readme.
  800.     - Changed the SegTracker output style of MuForce and MuGuardianAngel
  801.       to the Enforcer style. This is most useful for tools interpreting
  802.       these lines.
  803.  
  804. Thanks to all the nice folks that reported bugs, and sorry for the 
  805. inconvenience about all the bugs.
  806.  
  807. This distribution contains again a "mmu.library_debug". In case you encounter
  808. problems, please rename this to "mmu.library", install "Sushi" or "Sashimi"
  809. with a *LARGE* I/O buffer and run the tests again. Alternatively, connect
  810. a terminal to the serial port, 9600 baud, 8 bit, 1 stop bit, no parity.
  811.  
  812. Please collect the output and sent it to my email address. This will help 
  813. me a lot debugging the library.
  814.  
  815. -----> When reporting bugs, PLEASE PLEASE let me know:
  816.  
  817. o) About which version of the library you're running. I might have sent
  818. some of you an updated version.
  819. o) About which processor your system is running on.
  820. o) A MuScan output.
  821. o) Which SCSI/IDE device you're using.
  822.  
  823. In case you see a crash:
  824.  
  825. o) Please write down the guru number.
  826. o) Try to reproduce the crash, try to find out which program causes the
  827. crash. This means that you should try to edit your startup sequence and to
  828. remove patches from there until the crash disappears. You don't need to
  829. strip the startup-sequence permanently, but just to let me know which
  830. program causes the incompatibility.
  831.  
  832. Please understand that a "It won't work on my computer" doesn't help me 
  833. much to fix the problem. Try to be as concrete as possible, this will 
  834. increase the propability enourmously that bugs get fixed. (-;
  835.  
  836. A special note about the 0.3x releases:
  837.  
  838. I introduced a new guru, namely "AN_PostSetup 0x3e000015". In case you see
  839. this specific guru, let me know which program caused this.
  840.  
  841.  
  842. A special note about MuGuardianAngel:
  843.  
  844. This program is NOT compatible with PoolMem. Try not to install PoolMem on
  845. top of this, this won't work. MuGuardianAngel will be smart enough to cancel
  846. PoolMem if it is running, but it is not smart enough to prevent its 
  847. installation.
  848.  
  849.  
  850. A special note about "version" and related utilities aka "verscheck":
  851.  
  852. These tools OPEN the libraries in question. Hence, if you run "version"
  853. on a - possibly existant - 68040old.library, it will open this library and
  854. re-install a MMU table on top of the already loaded table. Either do
  855. not try this or remove the 68040new.library and the 68040old.library from
  856. your LIBS: drawer.
  857.  
  858.  
  859. A special note about "MMUCacheTest": 
  860.  
  861. If this program hangs on your system, please report this. Furthermore, please
  862. run it *AGAIN*, but this time with the "NOMMU" option on the command line
  863. and *WITHOUT ANY* tools that require the mmu.library. It would be best to
  864. boot without startup-sequence, run "SetPatch" by hand and then immediately
  865. "MMUCacheTest DH0: nommu".
  866.  
  867.  
  868. Release 0.30
  869. ------------
  870.     Ouh, just too many changes to mention:
  871.  
  872.     - Added tags to setup the MMU table layout, as the page size,
  873.       the depth of the MMU tree.
  874.     - Added functions to get and set some control values of the
  875.        MMU contexts.
  876.     - Added page access exception handler.
  877.     - CachePre/PostDMA patches are now always installed since 68020
  878.       and 68030 based systems need the logical -> physical trans-
  879.       lation as well.
  880.     - Reworked the mmu.library memory management.
  881.     - Fixed several bugs in the MuForce program, did not handle ROM
  882.       remapping correctly.
  883.     - MuFastRom and MuFastZero reworked a bit. MuFastZero OFF did
  884.       not work. Added more options for both tools.
  885.     - Added a new debugging tool: MuGuardianAngel. Some sort of
  886.       memory protection that keeps free memory from getting over-
  887.       written by faulty programs.
  888.     - Added more options to MuSetCacheMode.
  889.     - MuMove4K moves now the lowest 32K (and is hence misnamed). This
  890.       avoid trouble with large MMU table sizes on 68030/68020 based 
  891.       systems and pre-allocates memory for an "oxypatcher" type tool.
  892.     - Added MuLockLib tool, check the readme.
  893.     - ....
  894.  
  895.  
  896. Release 0.27
  897. ------------
  898.     - Fixed a bug in the task scheldurer.
  899.     - Added a second explicit cache flush for ColdReboot()
  900.     - Fixed a bug in the branch cache flush of the '060... Sorry!    
  901.     - Tested the library for public remapped memory... Works!
  902.     - Tested the library for private MMU trees... Works!
  903.  
  904.     - Since the 0.27 works now within its specifications, this will
  905.       be the last 0.2x release. We're going to 0.30 now.
  906.  
  907. Release 0.26
  908. ------------
  909.  
  910.     - Fixed a bug in the exception handling, forgot to restore a6.
  911.     - Fixed the return value of RebuildTree(). It's now TRUE on
  912.       success, not DOSTRUE.
  913.     - Fixed a bug in the table builder, merged sub-tree were released
  914.       incorrectly.
  915.     - Added the WithoutMMU() LVO entry.
  916.     - Removed the AllocLineMem() LVO, this one was useless.
  917.  
  918. Release 0.25
  919. ------------
  920.  
  921.     - Debugged 060 exception handler again. Found only one bug, ROM
  922.       emulation was broken.
  923.     - Enhanced AbsExecBase accesses - does no longer block interrupts
  924.       unnecessary.
  925.     - Fixed parts of the exception handler to read the faulty instruction
  926.       from the correct function code space.
  927.     - Added a complicated test for the EC030 processor that should
  928.       finally work.
  929.     - Enabled the MMULib internal exception handler test.
  930.     - Removed all accesses to the ppc.library and reserved entries.
  931.       PPC.lib compatibility is no longer an issue for me. The MMU.lib
  932.       is WarpOs-compatible, though, as long as the system isn't 
  933.       infected by Ralph's "software".
  934.     - Added a safety test in the MMUCacheTest program to avoid
  935.       hangs.
  936.  
  937. Release 0.24
  938. ------------
  939.  
  940.     - Fixed the 030/851 exception handler, especially the emulation
  941.       of instruction access of a possibly invalidated zero page,
  942.       now really, *BIG* thanks to Dave!
  943.     - MuForce does no longer ignore a remapped ROM. (Oops!)
  944.     - MuForce does no longer touch the mapping of the fspace
  945.       unless told to do so.
  946.     - Fixed the assembler includes and autodocs, thanks to Tilman!
  947.     - The context management of the library does no longer
  948.       reset the remap destination in case the memory remap flag
  949.       is not included in the mask settings. (Oops!)
  950.     - Fixed the MMU table builder for MMU tables using more than
  951.       32K entries.
  952.     - The startup code selects now a better page layout for 030/851
  953.       processors.
  954.     - MuForce tries now to re-use an already relocated vector base
  955.       if possible.
  956.     - Tiny speedup in the "InstallDescriptor" routine could speed up
  957.       MMU table building. There's room for more speedups, though.
  958.     - Added a "nommu" flag for the MMUCacheTest program to check    
  959.       your HD without the mmu.library. If this flag is used, the
  960.       program *MUST* be run without the mmu.library currently loaded.
  961.  
  962. Related fixes of COP (release 1.73, not included in this distribution):
  963.     - Fixed emulation of instruction access to the zero-page.
  964.     - Fixed the RestoreVBR option.
  965.     - Fixed the MMU disable mechanism on startup.
  966.  
  967. Special thanks goes to Dave "Ragman" for finding a lot of bugs in the 0.21
  968. release.
  969.  
  970. -----------------------------------------------------------------------------
  971.  
  972. Compatibility warnings and bad software:
  973.  
  974. - The MMU tables generated by the "CPU FastROM" command, an official CBM tool,
  975. are simply wrong if run on a 030 processor. Chip memory is marked as
  976. "cacheable", which is plain wrong. Already spoke to Michael Sinz who agrees
  977. in that point. Don't use it, run "MuFastRom" instead.
  978.  
  979. - The MMU tables build by "SetCPU FastRom" are not very well suited for 
  980. MuForce. The MMU library will replace the table layout by something more
  981. adapted.
  982.  
  983. Since these programs may install a "bogus" exception vector, you shouldn't
  984. run both programs with the "FastROM" option. If you absolutely want to do, 
  985. run them *before* installing any MMU.lib related program and COP - remember, 
  986. you have been warned. "MuFastROM" will do better once the library is finished.
  987.  
  988.  
  989. - CMQ060.lha from the Aminet: This program uses the MOVE16 instruction to
  990. "speed up" the copy mem routines of the Os. Besides that the speedup is
  991. minimal, you should be informed that this instruction is not fully 
  992. supported by the Amiga hardware. A MOVE16 into the chip memory could yield
  993. to "strange and wonderful things", and may or may not work. Its burst
  994. accesses simply don't fit into the DMA access mechanism of the Amiga 
  995. custom chips. (Note that no other instruction will try burst accesses
  996. into non-cacheable memory!)
  997. Moreover, if a MOVE16 crashes, the mmu.library is out of buisiness, it will 
  998. simply guru. Moreover, due to a firmware bug of the '040, a MOVE16 on a
  999. system using virtual memory might be unreliable and cause undesired side
  1000. effects. Do not run this program!
  1001.  
  1002. MOVE16 is one of the non-supported instructions in an Amiga system, others
  1003. are TAS, CAS and CAS2 (which are of little use in a single processor system).
  1004.  
  1005. For more detailed information of MOVE16, check either the enforcer.guide or
  1006. the motorola documentation, I'm not making this up, and this is not 
  1007. mmu.library related.
  1008.  
  1009. Known Bugs:
  1010. -----------
  1011.  
  1012.     The MMU table manager rebuilds currently the MMU tables for a
  1013.     complete memory block even if only a minor sub-block was changed.
  1014.     Therefore, it may take longer to build the MMU table than absolutely
  1015.     required. I decided not to change this behaiviour because it
  1016.     keeps the mmu tables clean and optimized and avoids fragmentation.
  1017.  
  1018.     The MMU library builds currently 68030 MMU tables with the
  1019.     REPAIRABLE flag set less efficient than it could. However, it 
  1020.     was felt that a consistent table layout is more helpful than the
  1021.     (minimal) speedup.
  1022.  
  1023.     The library does not yet contain a workaround for a 040 firmware
  1024.     bug: If an illegal, line A, chk or unimplemented floating point
  1025.     instruction is located at the last 16 bits of a page and the next
  1026.     page is not available, the 040 generates an access fault instead
  1027.     of the proper exception. The fault address is the address of the
  1028.     missing page, and the PC points to the instruction in the preceeding
  1029.     page. This doesn't matter too much currently, it might become
  1030.     relevant in a VM system.
  1031.  
  1032.     The library does not provide the MOVE16 instruction of the '040 and
  1033.     '060. See above for details. It does not work around the MOVE16
  1034.     firmware bug causing loss of cached data on MOVE16's into invalid
  1035.     memory, and it reacts with a guru in case a MOVE16 generates an
  1036.     access fault.
  1037.  
  1038.  
  1039. These bugs will be fixed within the next releases of the library, including
  1040. all the other bugs you may find.
  1041.     
  1042. -----------------------------------------------------------------------------
  1043.  
  1044. Special thanks goes to:
  1045.  
  1046. -Ralph Babel for giving information about the CachePreDMA/CachePostDMA
  1047.  functions and for some internals allowing me to write the MuOmniSCSIPatch.
  1048. -Carsten Schlote for starting development of a mmu.library aware 68060.lib.
  1049. -Michael Sinz (a real BIG thank you!) for discussing a lot of details of
  1050.  CachePreDMA/CachePostDMA, for sending me the sources of these functions
  1051.  in his 68040, and especially - and that's really great - for making the
  1052.  Enforcer sources available and for allowing me to reuse the exception
  1053.  handler of the Enforcer. This will happen in one of the next releases.
  1054. -Bjoern Schmidt for allowing me to run some tests on his 060 and for
  1055.  keeping several afternoons free for me.
  1056. -All the testers for running tests and sending me detailed information about
  1057.  their systems.
  1058.  
  1059. Thank you to all of you, this project won't clearly possible without your
  1060. support!    
  1061.  
  1062. -----------------------------------------------------------------------------
  1063.  
  1064. What is this:
  1065. -------------
  1066.     The mmu.library provides functions for MMU related operations
  1067.     as write- or read-protecting certain areas of memory for a
  1068.     given set of tasks, or marking memory regions as "swapped"
  1069.     virtual memory support. It offers an abstraction level on top
  1070.     of the actual MMU and a unified interface for MMU purposes.
  1071.  
  1072.     The MMU lib does NOT implement virtual memory, that's the purpose
  1073.     of another library - the memory.library. There's no much reason why
  1074.     any application except the memory.library and probably some debugging
  1075.     tools should call this library directly. The memory.library functions
  1076.     on top of this library should suffer for "all day purposes".
  1077.  
  1078.     The goal of the mmu.library is to provide an "abstraction layer" on
  1079.     top of the hardware, to allow programs to make use of the memory
  1080.     management hardware of the more advanced members of the MC68K
  1081.     processor family. Programs using the functions of the mmu.library
  1082.     do not need to modify the MMU tables directly and hence will not
  1083.     conflict with each other. The mmu.library interface provides all
  1084.     necessary functions to do that. This will allow programs like
  1085.     Enforcer and VMM to cooperate nicely with each other, provided both
  1086.     use this library.
  1087.  
  1088. Since writing the mmu.library is a tough job, I need your help!
  1089.  
  1090. Currently, only two systems are available right here, a MC68030 40Mhz
  1091. ad a MC68040 33Mhz. While this is better than before, I still need your
  1092. help since the library is supposed to support all members of the MC68K
  1093. family (the 68851, 68040 and 68060 MMUs). 
  1094. Since I don't have all these systems available, I need your
  1095. help - writing system software without being able to debug is "a bit" 
  1096. tricky.
  1097.  
  1098.  
  1099. What can I do as a non-developer:
  1100. ---------------------------------
  1101.  
  1102. Testing! Check the documentation of the programs within the documentation,
  1103. especially what you find the "MuTools" drawer, and lemme know how it goes.
  1104.  
  1105. More shell-based tests are in the "Shell_Only" drawer:
  1106.  
  1107. I) First test
  1108. --------------
  1109.  
  1110. Please run the MMUCacheTest program, too. It takes one argument, the
  1111. name of a hard disk. Don't worry, it won't harm your HD, it will simply
  1112. read sectors from it to test some critical MMU.library functions.
  1113.  
  1114. Please perform this test with as many "disk-like" devices as you can, i.e.
  1115. hard disks, CD Roms, SCSI and IDE devices of various kinds.
  1116.  
  1117. Here's an example run:
  1118.  
  1119. 1.SYS:> MMUCacheTest DH0: <RETURN>
  1120.  
  1121. MMUCacheTest 0.25 (14.03.99) © THOR.
  1122. Internal use only, no commercial use.
  1123. Initial read, calculate checksum.
  1124.  
  1125. Running the initial device test.
  1126. This test checks whether the connected device works reliable.
  1127. It does NOT check the MMU code which is not needed for this
  1128. initial run.
  1129. This test SHOULD NOT fail. In case it does, your device or
  1130. host adapter is broken, but not the MMU logic.
  1131.  
  1132. The initial test passed.
  1133.  
  1134. Running the real test. If this test fails, something is wrong
  1135. with the CachePreDMA/CachePostDMA logic. In this case, please
  1136. sent me an EMail so I can fix it.
  1137. The MMU cache test passed. Run 165329 RAM accesses.
  1138.  
  1139.  
  1140. In case any of the tests fail, or you see crashes, please let me know.
  1141. THIS IS AN IMPORTANT TEST. If anything fails here, the future mmu.library
  1142. might trash disk input.
  1143.  
  1144. If the tests pass, check the number of RAM accesses shown in the last line
  1145. of the output. This number *should* be larger than zero. If it's not, then
  1146. the test did effectively nothing. Please let me know in this case either,
  1147. I'll try to invent a more effective test in this case.
  1148.  
  1149.  
  1150. II) Second test
  1151. ---------------
  1152.  
  1153. Please run the MuContextTest program. It should not crash, but should
  1154. output the following:
  1155.  
  1156. 8.VIF:MMULib> Shell_Only/MuContextTest
  1157. A silly test.
  1158. A silly test.
  1159. B silly test.
  1160. C silly test.
  1161. D silly test.
  1162. E silly test.
  1163. F silly test.
  1164. G silly test.
  1165. H silly test.
  1166. I silly test.
  1167. J silly test.
  1168.  
  1169.  
  1170. This test checks whether the library context switch routine works correctly.
  1171. This is most important for the 68020/68851 since it is most sophisticated
  1172. for this hardware configuration.
  1173.  
  1174.  
  1175. III) Third test
  1176. ---------------
  1177.  
  1178. Please run this test LAST since it can't be aborted. The program is run
  1179. with one parameter, the name of a temporary file. Please DO NOT use a file
  1180. on the RAM or RAD since this won't test much, and DO NOT use the floppy
  1181. drives for the same reason. The optimal choice is an external medium like a
  1182. ZIP or a JAZ drive. This test checks mainly the device driver of your hard-
  1183. disk whether it is written MMU conformal or not. Users of the omniscsi.device
  1184. (the Guru ROM) should install the "MuOmniSCSIPatch" or the answer will be
  1185. "No".
  1186.  
  1187. Please run the test as follows:
  1188.  
  1189. 1.SYS:> MuRemapTest SYS:TempFile
  1190.  
  1191. The program will print the result on the screen.
  1192.  
  1193.  
  1194. If this test succeeds, the program will attempt to remap free exec memory
  1195. to a new position and builds a new memory pool. This memory will therefore
  1196. have different physical and logical addresses. Please try now whether your
  1197. system remains stable, but do not yet run MuGuardianAngel as it does not yet
  1198. support memory remapping.
  1199.  
  1200. The program can't be aborted since the remapped memory can't be released
  1201. if parts of it got allocated.
  1202.  
  1203.  
  1204. What can I do as developer:
  1205. ---------------------------
  1206.  
  1207. I'm still willing to give away the sources of the library, provided that
  1208.  
  1209. a) you keep them private and don't give them away (really!)
  1210. b) you help me debugging the library by using them.
  1211.  
  1212. They are no longer included in the "standard" distribution because that
  1213. would enlarge the archive unnecessary for most testers. In case you're
  1214. interested, just sent me a note.
  1215.  
  1216. Under the same restrictions, the MuGuardianAngel sources are available.
  1217.  
  1218.  
  1219.  
  1220. What about joining the mmu.library development group? This is just a couple
  1221. of people contributing to this library by writing code and exchanging their
  1222. wisdom by EMail. It's a non-profit organization that works on the development
  1223. of this library. If, whenever, this library becomes a commercial product, 
  1224. you'll get paid, of course. However, the current library, as it is, is planned
  1225. to be freeware, so don't expect money. It doesn't look like there's currently
  1226. a market for this library project, unfortunately. 
  1227.  
  1228. Contact me at thor@math.tu-berlin.de if you want to join this group.
  1229.  
  1230.  
  1231. What can be done just now is to run this library on your machine and find
  1232. and correct bugs. As I said, I haven't tested the 68851 and the 68060
  1233. parts at all. 
  1234.  
  1235. You might also want to develop software for the library. You find the
  1236. required includes and autodocs within this archive, as well as example
  1237. sources. In case you need support, just contact me.
  1238.  
  1239. There are a lot of library functions that require a bit more testing:
  1240.  
  1241. - All the functions that bypass the abstraction layer:
  1242.  
  1243.     GetPageProperties(),SetPageProperties(),PhysicalPageLocation()
  1244.  
  1245. - Remapping of memory and adding this memory to the exec memory pool.
  1246. - Building private contexts and swaps of the MMU tables on task swaps.
  1247. - SWITCH and LAUNCH type exception handlers.
  1248.  
  1249. I haven't been able yet to run all required tests, sorry. 
  1250.  
  1251.  
  1252. What is in this distribution:
  1253. -----------------------------
  1254.  
  1255. Autodocs:
  1256.     The preliminary version of the autodocs of the mmu.library and
  1257.     the memory library, as well as a file describing some planned
  1258.     implementation details.
  1259.  
  1260. Include:
  1261.     The includes for a C compiler as well as the ".fd" file for the
  1262.     library functions written so far. 
  1263.  
  1264. C_Sources:
  1265.     C sources of sample programs. All programs that are distributed
  1266.     under the THOR-Software licence are published here. The
  1267.     sources of MuForce *are not* available because they are partially
  1268.     copyrighted by Michael Sinz.
  1269.  
  1270. MuTools:
  1271.     Contains an increasing collection of programs that make use of 
  1272.     the MMU. For details, check their guides in this drawer.
  1273.  
  1274. Shell_Only:
  1275.     A couple of programs that can be run from the shell only, as there
  1276.     are:
  1277.  
  1278.     MMUCacheTest:
  1279.         Reads from HD, partially non-cache aligned to check whether
  1280.         boundary pages of the DMA buffer are correctly marked as non-
  1281.         cacheable. See above for how the test looks like.
  1282.  
  1283.     SCSIDMATest:
  1284.         Checks whether the hard disk driver uses CachePreDMA/CachePostDMA
  1285.         consistently. See above for the test. The source is included.
  1286.  
  1287.     TestMMU:
  1288.         This program is purely for debugging purposes. If you run it,
  1289.         you won't see any specific action. It simply opens the library
  1290.         manually and executes the library init function in the task
  1291.         context of the calling program. Hence, this program can be used
  1292.         to step thru the lib-init function with a standard debugger
  1293.         without the need to catch "ramlib".
  1294.         If you still discover bugs and want to try, then load this
  1295.         program into a debugger of your choice, and step thru it.
  1296.  
  1297.     PrintTTX:
  1298.         Prints the transparent translation registers, without using
  1299.         the library. Sometimes required by me if the library fails
  1300.         completely.
  1301.  
  1302.     ClearTTX:
  1303.         Clears the TTx registers. This is a test whether a certain
  1304.         board making use of an overclocked LC060 runs with a pure
  1305.         MMU setup.
  1306.  
  1307.     PrintBusError:
  1308.         Prints the location of the access error handler. This should
  1309.         point to the library in case it is installed.
  1310.  
  1311.     ResetBusError:
  1312.         Resets the bus error handler (! Not to be confused with the
  1313.         access error, this is something different if the library is
  1314.         running) to its system default. This tool MUST be run very
  1315.         early, with no debuggers active, or the bus error will be
  1316.         completely messed up.
  1317.  
  1318.     MuContextTest:
  1319.         Checks the MMU context switches by installing a task with
  1320.         a private context. The mmu.library has hence to switch 
  1321.         between two different MMU tables. See above for details
  1322.         how to run this test.
  1323.  
  1324.     MuRemapTest:
  1325.         Checks support of remapped memory by device drivers and
  1326.         the remaining system. Must be run with a temporary file
  1327.         on the harddisk to be checked. THIS TEST WON'T RETURN!
  1328.  
  1329.     CheckFPU:
  1330.           This program prints the version number of a 68040 FPU if 
  1331.         one is available. Two versions exist, the V40 "original" 
  1332.         which is very buggy and the V41 "revised" with less bugs. 
  1333.         The 68040.library supports currently both, with lots of 
  1334.         workarounds for the V40. Please contact me in case you 
  1335.         find a V40 edition in your Amiga.
  1336.  
  1337.     
  1338. Known bugs and problems of this implementation:
  1339. -----------------------------------------------
  1340.  
  1341. Things that require testing:
  1342.  
  1343.     - TTx register parsing updated, again. Should work fine with all the
  1344.       printouts I've collected, but you may still want to test it.
  1345.     - 68851 code likely untested, but I'm getting better. 
  1346.       I NEED YOUR HELP!
  1347.     - GetPageProperties/SetPageProperties are likely tested by the
  1348.       MuGuardianAngel program.
  1349.     - Page access exception handlers only likely tested by 
  1350.       MuGuardianAngel.
  1351.  
  1352. Things not yet implemented:
  1353.  
  1354.     - Patches for ppc libraries due to missing support. The
  1355.       ppc.library will remain unsupported, if you're the owner of
  1356.       a PPC board, run WarpOs, which is compatible.
  1357.  
  1358. Things the current design does not allow:
  1359.  
  1360.     - The MAPP_USED and MAPP_MODIFIED flags are not kept consistent
  1361.       by the library except for MAPP_SINGLE pages. I consider this
  1362.       as a minor problem since single page mode is required for
  1363.       virtual memory anyways.
  1364.     - MMU tables using the function codes. The amiga design shouldn't
  1365.       allow this anyways, but I don't know whether there's a board
  1366.       that makes use of them. (Doesn't look like, though).
  1367.     - Boards with two different MMU's on board. I've heard some
  1368.       rumours that there are actually 68040 boards with an additional
  1369.       68851. 
  1370.  
  1371. Debugging:
  1372. ----------
  1373.  
  1374. Yes, that's a problem of its own. Obviously, the MMU library uses some
  1375. "heavy magic" supervisor code which is not available for a standard monitor.
  1376. Even though the DevPac "MonAm" is a nice and powerful debugger, it's not
  1377. powerful enough for these tricks. There's currently - up to my knowledge -
  1378. only one debugger that can do this for you, and that's my own... (-;
  1379.  
  1380. Check the Aminet and my web-page for COP, then read the documentation. If,
  1381. after reading, you STILL want to use it, you're the right guy for this
  1382. job... (-;
  1383. COP might be setup to load the symbols of the library, to help you a bit.
  1384.  
  1385. The latest available version of COP is 1.73. Try to get the latest, if 
  1386. possible.
  1387.  
  1388. Recommended reading:
  1389. --------------------
  1390.  
  1391. The following books are recommended reading:
  1392.  
  1393.  
  1394. Motorola 68030 Enhanced 32-bit Microprocessor User's Manual    
  1395.     MC68030UM/AD Rev.3
  1396.  
  1397. Motorola 68040 User's Manual                    
  1398.     M68040UM/AD Rev.1
  1399.  
  1400. Motorola 68060 User's Manual                    
  1401.     M68060UM/AD Rev.1
  1402.  
  1403. Motorola M68000 Family Programmer's Reference Manual        
  1404.     M68000PM/AD Rev.1
  1405.  
  1406. Amiga Hardware Reference Manual, 3rd ed.
  1407.     Addison-Wesley Publishing Company, Inc.
  1408.     ISBN 0-201-56776-8
  1409.  
  1410. Amiga ROM Kernal Reference Manual, 3rd ed., Volume "Libraries"
  1411.     Addison-Wesley Publising Company, Inc.
  1412.     ISBN 0-201-56774-1
  1413.  
  1414. The Amiga Guru Book, 2nd Ed.
  1415.     Ralph Babel, Taunusstein 1989,1993
  1416.  
  1417. Additional sources:
  1418.     The Amiga Developer CD V1.1 
  1419.  
  1420.     The Enforcer.guide.
  1421.  
  1422.     Michael Sinz's documentation in the AmigaMail, on the DevCD 1.1.
  1423.  
  1424. Final words:
  1425. ------------
  1426.  
  1427. The mmu.library and the memory library will be my last project for the Amiga. 
  1428. It depends a bit on what happens with the Amiga in the next two years whether 
  1429. a PPC version of this library is required or not; hence, after all, this
  1430. can't be much more than a toy project that came several years too late.
  1431.  
  1432. So long,
  1433.     Thomas
  1434.